package store

// 考虑到对多种存储实现方式的支持，我们将针对图书的有限种存储操作，
// 放置在一个接口类型 Store 中

import "errors"

var (
    ErrNotFound = errors.New("not found")
    ErrExist    = errors.New("exist")
)


// 图书条目的抽象数据类型 Book
type Book struct {
    Id      string  `json:"id"`     // 图书ISBN
    Name    string  `json:"name"`
    Authors []string    `json:"authors"`
    Press   string      `json:"press"`
}

// 针对 Book 存取的接口类型 Store
type Store interface {
    Create(*Book) error     // 创建一个新图书条目
    Update(*Book) error
    Get(string) (Book, error)
    GetAll() ([]Book, error)
    Delete(string) error
}
// 面向接口设计：实现了图书存储操作与底层图书数据存储方式的解耦
// 即对图书的操作方来说，只需要有一个满足Store接口的实例，就能对图书操作
// 不需要关心底层的存储实现方式（例如：map、noSQL、MySQL）
